package file

import (
	"bufio"
	"fmt"
	"io"
	"io/ioutil"
	"os"
	"syscall"
)

const (
	defaultBufsize = 4096
)
const (
	O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
	O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件
	O_RDWR   int = syscall.O_RDWR   // 读写模式打开文件
	O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
	O_CREATE int = syscall.O_CREAT  // 如果不存在将创建一个新文件
	O_EXCL   int = syscall.O_EXCL   // 和O_CREATE配合使用，文件必须不存在
	O_SYNC   int = syscall.O_SYNC   // 打开文件用于同步I/O
	O_TRUNC  int = syscall.O_TRUNC  // 如果可能，打开时清空文件
)

// FileTest01 逐行读取文件
func FileTest01() {
	file, err := os.Open("E:/golong.txt")
	if err != nil {
		fmt.Printf("err=%v\n", err)
	}
	fmt.Printf("file=%v\n", file)

	defer file.Close()
	reader := bufio.NewReader(file)

	for {
		readString, err := reader.ReadString('\n')
		fmt.Println(readString)
		if err == io.EOF {
			fmt.Println("文件读取完毕！！")
			break
		}
	}
}

// Filetest02 一次性读取一个文件
func Filetest02() {

	readFile, err := ioutil.ReadFile("E:/fileTest03.txt")
	if err != io.EOF {
		fmt.Println("文件读取完毕")
	}
	fmt.Printf("%v\n", string(readFile))
}

// FileTest03 创建一个新文件 写入内容 五句 hello world
func FileTest03() {
	filepath := "E:/fileTest03.txt"
	file, err := os.OpenFile(filepath, O_RDWR|O_CREATE|O_APPEND|O_TRUNC, 0666)
	writer := bufio.NewWriter(file)
	if err != nil {
		fmt.Println("err=", err)
	}
	defer file.Close()

	for i := 0; i < 5; i++ {
		writer.WriteString("hello golong!!\n")
	}
	writer.Flush()

}
func FileTest() {
	//FileTest01()
	Filetest02()
	FileTest03()
}
